home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / ply-int1.lha / PLY2-Intro1 / INC / hardmacros.s < prev    next >
Encoding:
Text File  |  1994-05-21  |  5.0 KB  |  315 lines

  1. ;System initialisieren
  2. ;             >=(#)newcopper,(#)newint,(#)startadr
  3. coldinit MACRO
  4. hm_coldf equ 1
  5.     ENDM
  6. init     MACRO
  7.     IF \3<>0
  8.     jmp    \3        
  9.     org    \3
  10.     load    \3
  11.     ENDC
  12. init_lab
  13.     bsr    hm_owndesk
  14.     bra.w    init_x
  15. hm_owndesk
  16.     lea    gfxname(pc),a1            ;Save sys
  17.     move.l    4.w,a6
  18.     jsr    -408(a6)    ;Openlib
  19.     move.l    d0,a1
  20.     move.l    38(a1),oldcopper
  21.     move.l    34(a1),oldview
  22.     move.l    a1,a6
  23.     ifnd    hm_coldf
  24.      sub.l    a1,a1
  25.      jsr    -222(a6)    ;Loadview
  26.      jsr    -270(a6)    ;Waittof
  27.      jsr    -270(a6)
  28.     Endc
  29.     move.l    a6,a1
  30.     move.l    4.w,a6
  31.     jsr    -414(a6)    ;Closelib
  32.     move.w    #$8000,d0
  33.     lea    $dff000,a6
  34.     move.w    $2(a6),olddma            ;save dma
  35.     or.w    d0,olddma
  36.     move.w    $1c(a6),oldena            ;save irq enable
  37.     or.w    d0,oldena
  38.     move.l    $6c.w,oldint            ;save interupt vector
  39.     wblit
  40.     move.w    #$7fff,d0
  41.     move.w    d0,$9a(a6)
  42.     move.w    d0,$96(a6)
  43.     move.l    #\2,$6c.w
  44.     move.w    #$c020,$9a(a6)            ;start interupt
  45.     move.w    $7c(a6),d0
  46.     cmp.b    #$f8,d0
  47.     bne.s    .ecs        ;AGA?
  48.     move.w    #$c00,$106(a6)
  49.     clr.w    $1fc(a6)
  50. .ecs    
  51.     move.l    #\1,$80(a6)
  52.     move.w    #$83f0,$96(a6)            ;start copper
  53.     rts
  54. init_x
  55.     ENDM
  56. ;System verlassen+Datenpuffer anlegen
  57. exit     MACRO
  58.     bsr    hm_sysdesk
  59.     moveq    #0,d0
  60.     rts                    ;back to cli
  61. hm_sysdesk
  62.     lea    $dff000,a6
  63.     wblit
  64.     move.w    #$7fff,$9a(a6)
  65.     move.w    #$7fff,$96(a6)
  66.     wblit
  67.     move.l    oldint(pc),$6c.w
  68.     move.l    oldcopper(pc),$80(a6)
  69.     move.w    oldena(pc),d0
  70.     or.w    #$8000,d0
  71.     move.w    d0,$9a(a6)
  72.     move.w    olddma(pc),d0
  73.     or.w    #$8000,d0
  74.     move.w    d0,$96(a6)
  75.     lea    gfxname(pc),a1
  76.     move.l    4.w,a6
  77.     jsr    -408(a6)    ;Openlib
  78.     move.l    d0,a6
  79.     move.l    oldview,a1
  80.     jsr    -222(a6)    ;Loadview
  81.     move.l    a6,a1
  82.     move.l    4.w,a6
  83.     jsr    -414(a6)    ;Closelib
  84.     lea    $dff000,a6
  85.     rts
  86. olddma        dc.w    0
  87. oldena        dc.w    0
  88. oldint        dc.l    0
  89. oldcopper    dc.l    0
  90. oldview        dc.l    0
  91. gfxname        dc.b    'graphics.library',0,0
  92.     ENDM
  93. OWNDESK MACRO
  94.     bsr    hm_owndesk    
  95.     ENDM
  96. SYSDESK MACRO
  97.     bsr    hm_sysdesk    
  98.     ENDM
  99.     
  100.  
  101. ; Maustaste überprüfen, zu \1 falls noch nicht 
  102. msloop  MACRO    
  103.     btst    #6,$bfe001
  104.     bne    \1
  105.     ENDM
  106. ; Sprites ausknipsen
  107. sproff    MACRO
  108.     move.w    #32,$96(a6)
  109.     move.w    #15,d0
  110.     lea.l    $dff140,a0
  111. sl\@    clr.l    (a0)+
  112.     dbf    d0,sl\@
  113.     ENDM
  114. ; Multiplikationstabelle (long/word) generieren
  115. ;        >= (#)Dest(label),(#)Startwert,(#)Schrittw,(#)Anz
  116. genmull    MACRO
  117.     lea    \1,a0
  118.     move.w    #(\4)-1,d1
  119.     move.l    #\2,d0
  120. gmll\@    move.l    d0,(a0)+
  121.     addi.l    #\3,d0
  122.     dbf    d1,gmll\@
  123.     ENDM
  124. genmulw    MACRO
  125.     lea    \1,a0
  126.     move.w    #(\4)-1,d1
  127.     move.w    #\2,d0
  128. gmlw\@    move.w    d0,(a0)+
  129.     addi.w    #\3,d0
  130.     dbf    d1,gmlw\@
  131.     ENDM
  132. *
  133. ********  INTERRUPTSMACROS  ********************
  134. *
  135. irqin   MACRO
  136.     movem.l    d0-a6,-(a7)
  137.     ENDM
  138. ;Faderinterruptroutine (mit JSR Aufrufen)
  139. fadeirq    MACRO        
  140.     subq.w    #1,hmfadcnt
  141.     bne.s    fiend\@
  142.     move.w    hmfadpau,hmfadcnt
  143.     move.w    hmfadanz,d1
  144.     move.l    hmwishcol,a0
  145.      lea    hmfadcolt,a1
  146.     lea    $dff180,a2
  147. fadl\@    clr.w    d6
  148.     move.w    #$f,d4
  149.     move.w    #$1,d5
  150.     jsr    dofad\@
  151.     jsr    dofad\@
  152.     jsr    dofad\@
  153.     move.w    d6,(a1)+
  154.     move.w    d6,(a2)+
  155.     addq.l    #2,a0
  156.     dbf    d1,fadl\@
  157. fiend\@    rts
  158. dofad\@    move.w    (a0),d2        ;Wish in d2
  159.     move.w    (a1),d3        ;Real in d3
  160.     and.w    d4,d2
  161.     and.w    d4,d3
  162.     cmp.w    d3,d2
  163.     beq.s    dofend\@
  164.     bhi.s    addit\@
  165.     sub.w    d5,d3
  166.     bra.s    dofend\@
  167. addit\@    add.w    d5,d3    
  168. dofend\@ or.w    d3,d6
  169.     asl.w    #4,d4
  170.     asl.w    #4,d5
  171.     rts
  172. hmfadanz    dc.w 0
  173. hmwishcol    dc.l 0
  174. hmfadpau    dc.w 0
  175. hmfadcnt    dc.w 0
  176. hmfadcolt    blk.w 32,0
  177.     ENDM
  178. irqout  MACRO
  179.     clr.w    wvblflg
  180.     movem.l    (a7)+,d0-a6
  181.     move.w    #$20,$dff09c
  182.     rte
  183. wvblflg    dc.w    0
  184.     ENDM
  185.  
  186. ; auf VBL warten
  187. wvbl    MACRO
  188.     move.w    #1,wvblflg
  189. .wv\@    tst.w    wvblflg
  190.     bne.s    .wv\@
  191.     ENDM        
  192. lwvbl    MACRO
  193.     wvbl
  194.     ENDM        
  195.  
  196. ; per VBL faden
  197. ;        >= ?Farbtab.Pointer,?anz-1,?Speed(AnzVBLsPause)(>0)    ben. IRQIN
  198. fade    MACRO
  199.     move.w    \3,hmfadcnt
  200.     move.w    \3,hmfadpau
  201.     move.l    \1,hmwishcol
  202.     move.w    \2,hmfadanz 
  203.     ENDM
  204. ; Palette benutzen
  205. ;        >= (#)Fabtab.pointer,(#)anz
  206. usepal    MACRO
  207.     movem.l    d0/a0-a1,-(sp)
  208.     move.w    #\2,d0
  209.     move.w    d0,hmfadanz
  210.     lea.l    \1,a0
  211.     move.l    a0,hmwishcol
  212.     lea.l    hmfadcolt,a1
  213. upl\@    move.w    (a0),(a1)+
  214.     dbf    d0,upl\@    
  215.     movem.l    (sp)+,d0/a0-a1    
  216.     ENDM
  217. ; Auf Rasterstrahl warten
  218. ;        >=X,Y
  219. rasterwait MACRO
  220. rl\@    cmp.w    #((\2)<<8)+(\1),$6(a6)
  221.     bcs.s    rl\@
  222.     ENDM
  223.  
  224. ; TASTATURINTERRUPT  Instkey *inter, remkey
  225.  
  226. instkey MACRO
  227. ;             >=(#)IRQ (-> D0:Tastaturcode)
  228.  
  229.     move.l    $68.w,oldkint
  230.     move.l    #key_inter,$68.w
  231.     move.w    #$8008,$9a(a6)
  232.     bra.s    instkey_x
  233.  
  234. key_inter
  235.     movem.l    d0-a6,-(sp)
  236.     move.b    $bfed01,d0
  237.     btst    #3,d0
  238.     beq.s    .fintr
  239.     move.b    $bfec01,d0
  240.     bset    #6,$bfee01
  241.     moveq    #2,d2
  242. .lop2    move.b    $dff006,d1
  243. .lop1    move.b    #$ff,$bfec01
  244.     cmp.b    $dff006,d1
  245.     beq.s    .lop1
  246.     dbf    d2,.lop2
  247.  
  248.     bclr    #6,$bfee01
  249.     tst.b    d0
  250.     beq.s    .fintr
  251.     ror.b    d0
  252.     not.b    d0
  253.     move.b    d0,key
  254.     jsr    \1
  255. .fintr
  256.     movem.l    (sp)+,d0-a6
  257.     move.w    #$8,$dff09c
  258.     rte
  259. key    dc.b    0,0    
  260. oldkint    dc.l    0
  261. instkey_x
  262.     ENDM
  263.  
  264.  
  265. remkey    MACRO
  266.     move.l    oldkint,$68.w
  267.     ENDM
  268.  
  269. ;     Screentab rotieren
  270. ;>=(#)scrtab,(#)scranz (2-8)
  271. swapscr MACRO
  272.     IF (\2)>1
  273.     lea    \1(pc),a0
  274.     ENDC
  275.     IF (\2)=2
  276.     movem.l    (a0),d0/d1
  277.     move.l    d0,4(a0)
  278.     move.l    d1,(a0)
  279.     ENDC
  280.     IF (\2)=3
  281.     movem.l    (a0),d0-d2
  282.     movem.l    d1-d2,(a0)
  283.     move.l    d0,8(a0)
  284.     ENDC
  285.     IF (\2)=4
  286.     movem.l    (a0),d0-d3
  287.     movem.l    d1-d3,(a0)
  288.     move.l    d0,12(a0)
  289.     ENDC
  290.     IF (\2)=5
  291.     movem.l    (a0),d0-d4
  292.     movem.l    d1-d4,(a0)
  293.     move.l    d0,16(a0)
  294.     ENDC
  295.     IF (\2)=6
  296.     movem.l    (a0),d0-d5
  297.     movem.l    d1-d5,(a0)
  298.     move.l    d0,20(a0)
  299.     ENDC
  300.     IF (\2)=7
  301.     movem.l    (a0),d0-d6
  302.     movem.l    d1-d6,(a0)
  303.     move.l    d0,24(a0)
  304.     ENDC
  305.     IF (\2)=8
  306.     movem.l    (a0),d0-d7
  307.     movem.l    d1-d7,(a0)
  308.     move.l    d0,28(a0)
  309.     ENDC
  310.     IF (\2)>8
  311.     PRINTT "Fehler bei SWAPSCRMCR: Max 8 Screens!"
  312.     move.w    #not_defined\@,d0
  313.     ENDC
  314.     ENDM
  315.